package org.example;

import java.io.Serial;
import java.io.Serializable;
public class Student2 implements Serializable {
/*
Serializable是标记型接口，没有方法，只是一个标记，用来告诉JVM这个类（Student2）的对象是可以被序列化的
 */
    @Serial
    private static final long serialVersionUID = 1L;
//序列化对象后，修改javabean类，再次反序列化会抛出InvalidClassException异常，给该类添加serialVersionUID:序列化版本号就可以解决错误
//序列化版本号的作用:
//1.序列化版本号可以用来判断序列化的对象和反序列化的对象是否是同一个类
//2.如果序列化的对象和反序列化的对象不是同一个类，那么反序列化会抛出InvalidClassException异常
//3.如果序列化的对象和反序列化的对象不是同一个类，但是它们的序列化版本号相同，那么反序列化不会抛出异常
//4.如果序列化的对象和反序列化的对象不是同一个类，但是它们的序列化版本号不同，那么反序列化会抛出InvalidClassException异常
//5.如果序列化的对象和反序列化的对象不是同一个类，但是它们的序列化版本号不同，但是它们的字段相同，那么反序列化不会抛出异常
//6.如果序列化的对象和反序列化的对象不是同一个类，但是它们的序列化版本号不同，但是它们的字段不同，那么反序列化会抛出InvalidClassException异常
    private String name;
    private int age;
//如果某个成员变量不想被序列化，那么可以在该成员变量前添加transient关键字 表示不参与序列化
    private transient String sex;
    public Student2() {
    }
    public Student2(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student2{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
